package org.example.java.jvm.error;

import java.util.ArrayList;
import java.util.List;

/**
 * Todo 1.7 被优化了
 * VM Args：-XX:PermSize=10M -XX:MaxPermSize=10M
 * 运行时常量池
 * <p/>
 * 在运行时产生大量常量就可以实现让 Method Area 溢出的目的。运行是常量可以用 String 类的 intern 方法，不断地产生新的常量。
 * <p/>
 * run result:
 * Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
 * at java.lang.String.intern(Native Method)
 */
public class RuntimeConstantPoolOOM {
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    int i = 0;
    try {
      while (true) {
        String str = String.valueOf("在运行时产生大量常量就可以实现让 Method Area 溢出的目的。运行是常量可以用 String 类的 intern 方法，不断地产生新的常量。" + i++).intern();
        list.add(str);
      }
    } finally {
      System.out.println(i);
    }

  }
}
